{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 模型训练\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import os\n",
    "import tqdm\n",
    "import datetime\n",
    "import time\n",
    "\n",
    "base_path = 'stock'\n",
    "\n",
    "market_map = {'主板':0, '中小板':1}\n",
    "exchange_map = {'SZSE':0, 'SSE':1}\n",
    "is_hs_map = {'S':0, 'N':1, 'H':2}\n",
    "\n",
    "area_map = {'深圳': 0, '北京': 1, '吉林': 2, '江苏': 3, '辽宁': 4, '广东': 5, '安徽': 6, '四川': 7, '浙江': 8,\n",
    "            '湖南': 9, '河北': 10, '新疆': 11, '山东': 12, '河南': 13, '山西': 14, '江西': 15, '青海': 16, \n",
    "            '湖北': 17, '内蒙': 18, '海南': 19, '重庆': 20, '陕西': 21, '福建': 22, '广西': 23, '天津': 24, \n",
    "            '云南': 25, '贵州': 26, '甘肃': 27, '宁夏': 28, '黑龙江': 29, '上海': 30, '西藏': 31}\n",
    "\n",
    "industry_map = {'银行': 0, '全国地产': 1, '生物制药': 2, '环境保护': 3, '区域地产': 4, '酒店餐饮': 5, '运输设备': 6, \n",
    " '综合类': 7, '建筑工程': 8, '玻璃': 9, '家用电器': 10, '文教休闲': 11, '其他商业': 12, '元器件': 13, \n",
    " 'IT设备': 14, '其他建材': 15, '汽车服务': 16, '火力发电': 17, '医药商业': 18, '汽车配件': 19, '广告包装': 20, \n",
    " '轻工机械': 21, '新型电力': 22, '饲料': 23, '电气设备': 24, '房产服务': 25, '石油加工': 26, '铅锌': 27, '农业综合': 28,\n",
    " '批发业': 29, '通信设备': 30, '旅游景点': 31, '港口': 32, '机场': 33, '石油贸易': 34, '空运': 35, '医疗保健': 36,\n",
    " '商贸代理': 37, '化学制药': 38, '影视音像': 39, '工程机械': 40, '软件服务': 41, '证券': 42, '化纤': 43, '水泥': 44, \n",
    " '专用机械': 45, '供气供热': 46, '农药化肥': 47, '机床制造': 48, '多元金融': 49, '百货': 50, '中成药': 51, '路桥': 52, \n",
    " '造纸': 53, '食品': 54, '黄金': 55, '化工原料': 56, '矿物制品': 57, '水运': 58, '日用化工': 59, '机械基件': 60, \n",
    " '汽车整车': 61, '煤炭开采': 62, '铁路': 63, '染料涂料': 64, '白酒': 65, '林业': 66, '水务': 67, '水力发电': 68, \n",
    " '互联网': 69, '旅游服务': 70, '纺织': 71, '铝': 72, '保险': 73, '园区开发': 74, '小金属': 75, '铜': 76, '普钢': 77, \n",
    " '航空': 78, '特种钢': 79, '种植业': 80, '出版业': 81, '焦炭加工': 82, '啤酒': 83, '公路': 84, '超市连锁': 85, \n",
    " '钢加工': 86, '渔业': 87, '农用机械': 88, '软饮料': 89, '化工机械': 90, '塑料': 91, '红黄酒': 92, '橡胶': 93, '家居用品': 94,\n",
    " '摩托车': 95, '电器仪表': 96, '服饰': 97, '仓储物流': 98, '纺织机械': 99, '电器连锁': 100, '装修装饰': 101, '半导体': 102, \n",
    " '电信运营': 103, '石油开采': 104, '乳制品': 105, '商品城': 106, '公共交通': 107, '船舶': 108, '陶瓷': 109}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 2892/2892 [01:21<00:00, 35.49it/s]\n"
     ]
    }
   ],
   "source": [
    "def JudgeST(x):\n",
    "    if 'ST' in x:\n",
    "        return 1\n",
    "    else:\n",
    "        return 0\n",
    "\n",
    "def GetMA(df, col_name, rolling_day):\n",
    "    tmp_array = df[col_name].values.reshape(-1)\n",
    "    df.loc[ rolling_day:, col_name + '_'+str(rolling_day)] = (tmp_array[0:-rolling_day] - \n",
    "                                                              tmp_array[rolling_day:]) / tmp_array[0:-rolling_day]\n",
    "    return df\n",
    "\n",
    "col = ['ma'+str(i) for i in [5, 10, 13, 21, 30]] + ['ma_v_'+str(i) for i in [5, 10, 13, 21, 30]]\n",
    "\n",
    "company_info = pd.read_csv(os.path.join(base_path, 'company_info.csv'), encoding='ANSI')\n",
    "company_info['is_ST'] = company_info['name'].apply(JudgeST)\n",
    "# 丢弃一些多余的信息\n",
    "company_info.drop(['index', 'symbol', 'fullname'], axis=1, inplace=True)\n",
    "company_info.dropna(inplace=True)\n",
    "company_info['market'] = company_info['market'].map(market_map)\n",
    "company_info['exchange'] = company_info['exchange'].map(exchange_map)\n",
    "company_info['is_hs'] = company_info['is_hs'].map(is_hs_map)\n",
    "\n",
    "\n",
    "# 读取指数信息\n",
    "stock_index_info = pd.DataFrame()\n",
    "tmp_df = pd.read_csv(os.path.join(base_path,  'OldData', '000001.SH_NormalData.csv'))\n",
    "tmp_list = list(tmp_df['trade_date'].sort_values())\n",
    "date_map = dict(zip(tmp_list, range(len(tmp_list))))\n",
    "\n",
    "# 读取股票交易信息\n",
    "stock_info = pd.DataFrame()\n",
    "remove_stock = []\n",
    "tmp_list = []\n",
    "for ts_code in tqdm.tqdm(company_info['ts_code']):\n",
    "    try:\n",
    "        tmp_df = pd.read_csv(os.path.join(base_path,  'OldData', ts_code + '_NormalData.csv'))\n",
    "    except:\n",
    "        continue\n",
    "        pass\n",
    "    # 还需要去除一些停牌时间很久的企业，后期加\n",
    "    if len(tmp_df) < 100:  # 去除一些上市不久的企业\n",
    "        remove_stock.append(ts_code)\n",
    "        continue\n",
    "    tmp_df = tmp_df.sort_values('trade_date', ascending=True).reset_index(drop=True)    \n",
    "    for tmp_col in col:\n",
    "        for rolling_day in [5]:\n",
    "            tmp_df = GetMA(tmp_df, tmp_col, rolling_day)\n",
    "    tmp_list.append(tmp_df)\n",
    "    \n",
    "stock_info = pd.concat(tmp_list)\n",
    "stock_info = stock_info.reset_index(drop=True)\n",
    "ts_code_map = dict(zip(list(company_info['ts_code']), range(len(company_info))))\n",
    "\n",
    "\n",
    "stock_info = stock_info.reset_index(drop=True)\n",
    "stock_info['ts_code_id'] = stock_info['ts_code'].map(ts_code_map)\n",
    "\n",
    "stock_info['trade_date_id'] = stock_info['trade_date'].map(date_map)\n",
    "stock_info['ts_date_id'] = (10000 + stock_info['ts_code_id']) * 10000 + stock_info['trade_date_id']\n",
    "stock_info = stock_info.merge(company_info, how='left', on='ts_code')\n",
    "stock_info_copy = stock_info.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4345535 4345535\n"
     ]
    }
   ],
   "source": [
    "stock_info = stock_info.drop_duplicates(subset=['ts_date_id'])\n",
    "print(len(stock_info), len(stock_info_copy))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "feature_col = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 获取月份 和 星期几\n",
    "def get_weekday(x):\n",
    "    x = str(x)\n",
    "    return datetime.datetime.fromtimestamp(time.mktime(time.strptime(x, \"%Y%m%d\"))).weekday()\n",
    "stock_info['month'] = stock_info['trade_date'].apply(lambda x: int(str(x)[4:6]))\n",
    "stock_info['weekday'] = stock_info['trade_date'].apply(get_weekday)\n",
    "feature_col.append('month')\n",
    "feature_col.append('weekday')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 添加涨跌停信息\n",
    "limit_info = pd.read_csv('limit.csv')\n",
    "limit_info.drop('file', axis=1, inplace=True)\n",
    "limit_info['U-D'] = limit_info['U'] - limit_info['D']\n",
    "limit_info = limit_info.rename(columns={'date':'trade_date'})\n",
    "stock_info = stock_info.merge(limit_info[['U-D', 'trade_date']], on='trade_date', how='left')\n",
    "feature_col.append('U-D')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 求相对的vol 这里与10均线比较\n",
    "stock_info['vol'] = (stock_info['vol'] - stock_info['ma_v_10']) / stock_info['ma_v_10']\n",
    "feature_col.append('vol')\n",
    "\n",
    "#转换low colse等\n",
    "col = ['open', 'high', 'low', 'high', 'pre_close']\n",
    "for tmp_col in col:\n",
    "    stock_info[tmp_col+'_transform'] = (stock_info[tmp_col] - stock_info['ma10']) / stock_info['ma10']\n",
    "    feature_col.append(tmp_col+'_transform')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "amount_index_000001\n",
      "pre_close_index_000001\n",
      "amount\n",
      "pre_close\n"
     ]
    }
   ],
   "source": [
    "# 添加大盘指数信息\n",
    "tmp_df = pd.read_csv(os.path.join(base_path,  'OldData', '000001.SH' + '_NormalData.csv'))\n",
    "for tmp_col in ['amount', 'pre_close']:\n",
    "    tmp_df = tmp_df.rename(columns={tmp_col: tmp_col + '_index_000001'})\n",
    "    stock_info = stock_info.merge(tmp_df[['trade_date', tmp_col + '_index_000001']], on='trade_date', how='left')\n",
    "\n",
    "for tmp_col in ['amount_index_000001', 'pre_close_index_000001', 'amount', 'pre_close']:\n",
    "    print(tmp_col)\n",
    "    for i in range(5):\n",
    "        tmp_df = stock_info[['ts_date_id', tmp_col]]\n",
    "        new_col_name = tmp_col + '_shift_{}'.format(i+1)\n",
    "        tmp_df = tmp_df.rename(columns={tmp_col:new_col_name})\n",
    "        feature_col.append(new_col_name)\n",
    "        tmp_df['ts_date_id'] = tmp_df['ts_date_id'] + i + 1\n",
    "        stock_info = stock_info.merge(tmp_df, how='left', on='ts_date_id')\n",
    "    for i in range(5):\n",
    "        new_col_name = tmp_col + '_shift_{}'.format(i+1)\n",
    "        stock_info[new_col_name] = (stock_info[tmp_col] - stock_info[new_col_name]) / stock_info[new_col_name]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "feature_col.append('turnover_rate')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['trade_date', 'ts_code', 'open', 'high', 'low', 'close', 'pre_close',\n",
       "       'change', 'pct_chg', 'vol', 'amount', 'turnover_rate', 'volume_ratio',\n",
       "       'ma5', 'ma_v_5', 'ma10', 'ma_v_10', 'ma13', 'ma_v_13', 'ma21',\n",
       "       'ma_v_21', 'ma30', 'ma_v_30', 'ma60', 'ma_v_60', 'ma120', 'ma_v_120',\n",
       "       'ma5_5', 'ma10_5', 'ma13_5', 'ma21_5', 'ma30_5', 'ma_v_5_5',\n",
       "       'ma_v_10_5', 'ma_v_13_5', 'ma_v_21_5', 'ma_v_30_5', 'ts_code_id',\n",
       "       'trade_date_id', 'ts_date_id', 'name', 'area', 'industry', 'market',\n",
       "       'exchange', 'list_date', 'is_hs', 'is_ST', 'month', 'weekday', 'U-D',\n",
       "       'open_transform', 'high_transform', 'low_transform',\n",
       "       'pre_close_transform', 'amount_index_000001', 'pre_close_index_000001',\n",
       "       'amount_index_000001_shift_1', 'amount_index_000001_shift_2',\n",
       "       'amount_index_000001_shift_3', 'amount_index_000001_shift_4',\n",
       "       'amount_index_000001_shift_5', 'pre_close_index_000001_shift_1',\n",
       "       'pre_close_index_000001_shift_2', 'pre_close_index_000001_shift_3',\n",
       "       'pre_close_index_000001_shift_4', 'pre_close_index_000001_shift_5',\n",
       "       'amount_shift_1', 'amount_shift_2', 'amount_shift_3', 'amount_shift_4',\n",
       "       'amount_shift_5', 'pre_close_shift_1', 'pre_close_shift_2',\n",
       "       'pre_close_shift_3', 'pre_close_shift_4', 'pre_close_shift_5'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_info.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "特征需要向前移一天，策略买入是第二天的开盘价，所以当天算出来的特征需要向前平移一天\n",
    "\n",
    "将特征向前平移一天也可以方便后期给大家推荐股票\n",
    "\n",
    "设置买入时间为第二天的开盘，买入价格开盘价\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_info['ts_date_id'] = stock_info['ts_date_id'] + 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 标签读取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "label_path = os.path.join('stock','label', 'label.csv')\n",
    "label = pd.read_csv(label_path)\n",
    "label = label[['ts_code', 'trade_date', 'open', 'ts_date_id', 'label_final']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_info.drop(['open', 'trade_date', 'ts_code'], axis=1, inplace=True)\n",
    "stock_info = label.merge(stock_info, on='ts_date_id', how='left')\n",
    "stock_info.dropna(inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2165980\n"
     ]
    }
   ],
   "source": [
    "stock_info = stock_info.reset_index(drop=True)\n",
    "print(len(stock_info))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ts_code</th>\n",
       "      <th>trade_date</th>\n",
       "      <th>open</th>\n",
       "      <th>ts_date_id</th>\n",
       "      <th>label_final</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>close</th>\n",
       "      <th>pre_close</th>\n",
       "      <th>change</th>\n",
       "      <th>...</th>\n",
       "      <th>amount_shift_1</th>\n",
       "      <th>amount_shift_2</th>\n",
       "      <th>amount_shift_3</th>\n",
       "      <th>amount_shift_4</th>\n",
       "      <th>amount_shift_5</th>\n",
       "      <th>pre_close_shift_1</th>\n",
       "      <th>pre_close_shift_2</th>\n",
       "      <th>pre_close_shift_3</th>\n",
       "      <th>pre_close_shift_4</th>\n",
       "      <th>pre_close_shift_5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>000001.SZ</td>\n",
       "      <td>20160216</td>\n",
       "      <td>7.7511</td>\n",
       "      <td>100000996</td>\n",
       "      <td>0</td>\n",
       "      <td>7.7590</td>\n",
       "      <td>7.6014</td>\n",
       "      <td>7.7117</td>\n",
       "      <td>7.8141</td>\n",
       "      <td>-0.1024</td>\n",
       "      <td>...</td>\n",
       "      <td>0.007389</td>\n",
       "      <td>-0.268258</td>\n",
       "      <td>0.004354</td>\n",
       "      <td>-0.261833</td>\n",
       "      <td>-0.342826</td>\n",
       "      <td>-0.003024</td>\n",
       "      <td>0.007101</td>\n",
       "      <td>-0.003024</td>\n",
       "      <td>0.012242</td>\n",
       "      <td>-0.007998</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>000001.SZ</td>\n",
       "      <td>20160217</td>\n",
       "      <td>7.9008</td>\n",
       "      <td>100000997</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9008</td>\n",
       "      <td>7.7432</td>\n",
       "      <td>7.8850</td>\n",
       "      <td>7.7117</td>\n",
       "      <td>0.1733</td>\n",
       "      <td>...</td>\n",
       "      <td>0.576511</td>\n",
       "      <td>0.588160</td>\n",
       "      <td>0.153599</td>\n",
       "      <td>0.583375</td>\n",
       "      <td>0.163728</td>\n",
       "      <td>-0.013105</td>\n",
       "      <td>-0.016089</td>\n",
       "      <td>-0.006096</td>\n",
       "      <td>-0.016089</td>\n",
       "      <td>-0.001023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>000001.SZ</td>\n",
       "      <td>20160218</td>\n",
       "      <td>8.0189</td>\n",
       "      <td>100000998</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0504</td>\n",
       "      <td>7.8693</td>\n",
       "      <td>7.9953</td>\n",
       "      <td>7.8850</td>\n",
       "      <td>0.1103</td>\n",
       "      <td>...</td>\n",
       "      <td>0.381352</td>\n",
       "      <td>1.177717</td>\n",
       "      <td>1.193808</td>\n",
       "      <td>0.593527</td>\n",
       "      <td>1.187199</td>\n",
       "      <td>0.022472</td>\n",
       "      <td>0.009073</td>\n",
       "      <td>0.006022</td>\n",
       "      <td>0.016239</td>\n",
       "      <td>0.006022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>000001.SZ</td>\n",
       "      <td>20160219</td>\n",
       "      <td>7.9480</td>\n",
       "      <td>100000999</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0504</td>\n",
       "      <td>7.9480</td>\n",
       "      <td>7.9480</td>\n",
       "      <td>7.9953</td>\n",
       "      <td>-0.0473</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.301761</td>\n",
       "      <td>-0.035485</td>\n",
       "      <td>0.520568</td>\n",
       "      <td>0.531803</td>\n",
       "      <td>0.112663</td>\n",
       "      <td>0.013989</td>\n",
       "      <td>0.036775</td>\n",
       "      <td>0.023189</td>\n",
       "      <td>0.020095</td>\n",
       "      <td>0.030455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>000001.SZ</td>\n",
       "      <td>20160222</td>\n",
       "      <td>7.9795</td>\n",
       "      <td>100001000</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9874</td>\n",
       "      <td>7.8693</td>\n",
       "      <td>7.9087</td>\n",
       "      <td>7.9480</td>\n",
       "      <td>-0.0393</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.221658</td>\n",
       "      <td>-0.456531</td>\n",
       "      <td>-0.249278</td>\n",
       "      <td>0.183522</td>\n",
       "      <td>0.192267</td>\n",
       "      <td>-0.005916</td>\n",
       "      <td>0.007990</td>\n",
       "      <td>0.030642</td>\n",
       "      <td>0.017136</td>\n",
       "      <td>0.014060</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 78 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     ts_code  trade_date    open  ts_date_id  label_final    high     low  \\\n",
       "0  000001.SZ    20160216  7.7511   100000996            0  7.7590  7.6014   \n",
       "1  000001.SZ    20160217  7.9008   100000997            0  7.9008  7.7432   \n",
       "2  000001.SZ    20160218  8.0189   100000998            0  8.0504  7.8693   \n",
       "3  000001.SZ    20160219  7.9480   100000999            0  8.0504  7.9480   \n",
       "4  000001.SZ    20160222  7.9795   100001000            0  7.9874  7.8693   \n",
       "\n",
       "    close  pre_close  change        ...          amount_shift_1  \\\n",
       "0  7.7117     7.8141 -0.1024        ...                0.007389   \n",
       "1  7.8850     7.7117  0.1733        ...                0.576511   \n",
       "2  7.9953     7.8850  0.1103        ...                0.381352   \n",
       "3  7.9480     7.9953 -0.0473        ...               -0.301761   \n",
       "4  7.9087     7.9480 -0.0393        ...               -0.221658   \n",
       "\n",
       "   amount_shift_2  amount_shift_3  amount_shift_4  amount_shift_5  \\\n",
       "0       -0.268258        0.004354       -0.261833       -0.342826   \n",
       "1        0.588160        0.153599        0.583375        0.163728   \n",
       "2        1.177717        1.193808        0.593527        1.187199   \n",
       "3       -0.035485        0.520568        0.531803        0.112663   \n",
       "4       -0.456531       -0.249278        0.183522        0.192267   \n",
       "\n",
       "   pre_close_shift_1  pre_close_shift_2  pre_close_shift_3  pre_close_shift_4  \\\n",
       "0          -0.003024           0.007101          -0.003024           0.012242   \n",
       "1          -0.013105          -0.016089          -0.006096          -0.016089   \n",
       "2           0.022472           0.009073           0.006022           0.016239   \n",
       "3           0.013989           0.036775           0.023189           0.020095   \n",
       "4          -0.005916           0.007990           0.030642           0.017136   \n",
       "\n",
       "   pre_close_shift_5  \n",
       "0          -0.007998  \n",
       "1          -0.001023  \n",
       "2           0.006022  \n",
       "3           0.030455  \n",
       "4           0.014060  \n",
       "\n",
       "[5 rows x 78 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stock_info.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "trn_col = feature_col\n",
    "# 'high', 'low', 'close', 'pre_close',\n",
    "trn_col = list(set(trn_col))\n",
    "label = 'label_final'\n",
    "# trn_date_min = 20170103\n",
    "# trn_date_max = 20190416\n",
    "# val_date_min = 20190417\n",
    "# val_date_max = 20190429\n",
    "# test_date_min = 20190417\n",
    "# test_date_max = 20191218\n",
    "\n",
    "trn_date_min = 20160103\n",
    "trn_date_max = 20190101\n",
    "val_date_min = 20190101\n",
    "val_date_max = 20190419\n",
    "test_date_min = 20190101\n",
    "test_date_max = 20191218\n",
    "\n",
    "trn_data_idx = (stock_info['trade_date'] >= trn_date_min) & (stock_info['trade_date'] <= trn_date_max) & (stock_info['high']!=stock_info['close'])\n",
    "val_data_idx = (stock_info['trade_date'] >= val_date_min) & (stock_info['trade_date'] <= val_date_max)\n",
    "test_data_idx = (stock_info['trade_date'] >= test_date_min) & (stock_info['trade_date'] <= test_date_max)\n",
    "\n",
    "trn = stock_info[trn_data_idx][trn_col]\n",
    "trn_label = stock_info[trn_data_idx][label].values\n",
    "\n",
    "val = stock_info[val_data_idx][trn_col]\n",
    "val_label = stock_info[val_data_idx][label].values \n",
    "\n",
    "test = stock_info[test_data_idx][trn_col]\n",
    "test_label = stock_info[test_data_idx][label].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "rate of 0: 0.7959, rate of 1: 0.2041\n",
      "trn data:1504122, val data:195287, test data:608037\n",
      "number of features:29\n",
      "['month', 'weekday', 'U-D', 'vol', 'open_transform', 'high_transform', 'low_transform', 'high_transform', 'pre_close_transform', 'amount_index_000001_shift_1', 'amount_index_000001_shift_2', 'amount_index_000001_shift_3', 'amount_index_000001_shift_4', 'amount_index_000001_shift_5', 'pre_close_index_000001_shift_1', 'pre_close_index_000001_shift_2', 'pre_close_index_000001_shift_3', 'pre_close_index_000001_shift_4', 'pre_close_index_000001_shift_5', 'amount_shift_1', 'amount_shift_2', 'amount_shift_3', 'amount_shift_4', 'amount_shift_5', 'pre_close_shift_1', 'pre_close_shift_2', 'pre_close_shift_3', 'pre_close_shift_4', 'pre_close_shift_5', 'turnover_rate']\n"
     ]
    }
   ],
   "source": [
    "print('rate of 0: %.4f, rate of 1: %.4f' % (np.sum(trn_label==0)/len(trn_label), np.sum(trn_label==1)/len(trn_label)))\n",
    "print('trn data:%d, val data:%d, test data:%d' % (len(trn), len(val), len(test)))\n",
    "print('number of features:%d' % len(trn_col))\n",
    "print(feature_col)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def win_score_eval(preds, valid_df):\n",
    "    labels = valid_df.get_label()\n",
    "    preds = np.round(preds)\n",
    "    tp = np.sum((preds==1)&(labels==1))\n",
    "    pp = np.sum(preds==1)\n",
    "    scores = tp/(pp+0.001) + 2.5*tp - pp\n",
    "#     preds = np.argmax(preds.reshape(3, -1), axis=0)\n",
    "#     scores = f1_score(y_true=labels, y_pred=preds, average='macro')\n",
    "    return 'win', scores, True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 模型训练及评价\n",
    "import lightgbm as lgb\n",
    "from sklearn import metrics\n",
    "param = {'num_leaves': 31,\n",
    "         'min_data_in_leaf': 20,\n",
    "         'objective': 'binary',\n",
    "         'learning_rate': 0.06,\n",
    "         \"boosting\": \"gbdt\",\n",
    "#          \"bagging_freq\": 1,\n",
    "#          \"bagging_seed\": 11,\n",
    "         \"metric\": 'None',\n",
    "         \"verbosity\": -1}\n",
    "trn_data = lgb.Dataset(trn, trn_label)\n",
    "val_data = lgb.Dataset(val, val_label)\n",
    "num_round =1000\n",
    "# clf = lgb.train(param, trn_data, num_round, valid_sets=[trn_data, val_data], verbose_eval=100,\n",
    "#                 early_stopping_rounds=300, feval=win_score_eval)\n",
    "clf = lgb.train(param, trn_data, num_round, verbose_eval=300)\n",
    "# oof_lgb = clf.predict(val, num_iteration=clf.best_iteration)\n",
    "test_lgb = clf.predict(test, num_iteration=clf.best_iteration)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>column</th>\n",
       "      <th>importance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>turnover_rate</td>\n",
       "      <td>1637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>pre_close_index_000001_shift_5</td>\n",
       "      <td>1525</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>U-D</td>\n",
       "      <td>1384</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>high_transform</td>\n",
       "      <td>1265</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>amount_index_000001_shift_3</td>\n",
       "      <td>1218</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>amount_index_000001_shift_2</td>\n",
       "      <td>1199</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>pre_close_index_000001_shift_1</td>\n",
       "      <td>1185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>amount_index_000001_shift_5</td>\n",
       "      <td>1174</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>amount_index_000001_shift_1</td>\n",
       "      <td>1165</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>month</td>\n",
       "      <td>1159</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>pre_close_shift_1</td>\n",
       "      <td>1139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>low_transform</td>\n",
       "      <td>1127</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>pre_close_index_000001_shift_2</td>\n",
       "      <td>1117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>pre_close_index_000001_shift_3</td>\n",
       "      <td>1076</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>amount_index_000001_shift_4</td>\n",
       "      <td>1060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>pre_close_shift_2</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>pre_close_index_000001_shift_4</td>\n",
       "      <td>1016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>pre_close_shift_3</td>\n",
       "      <td>936</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>vol</td>\n",
       "      <td>927</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>amount_shift_5</td>\n",
       "      <td>898</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>amount_shift_1</td>\n",
       "      <td>890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>amount_shift_2</td>\n",
       "      <td>890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>pre_close_shift_4</td>\n",
       "      <td>869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>pre_close_transform</td>\n",
       "      <td>835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>pre_close_shift_5</td>\n",
       "      <td>830</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>amount_shift_4</td>\n",
       "      <td>820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>amount_shift_3</td>\n",
       "      <td>788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>open_transform</td>\n",
       "      <td>564</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>weekday</td>\n",
       "      <td>283</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            column  importance\n",
       "2                    turnover_rate        1637\n",
       "0   pre_close_index_000001_shift_5        1525\n",
       "18                             U-D        1384\n",
       "28                  high_transform        1265\n",
       "11     amount_index_000001_shift_3        1218\n",
       "1      amount_index_000001_shift_2        1199\n",
       "23  pre_close_index_000001_shift_1        1185\n",
       "17     amount_index_000001_shift_5        1174\n",
       "15     amount_index_000001_shift_1        1165\n",
       "21                           month        1159\n",
       "6                pre_close_shift_1        1139\n",
       "22                   low_transform        1127\n",
       "19  pre_close_index_000001_shift_2        1117\n",
       "7   pre_close_index_000001_shift_3        1076\n",
       "8      amount_index_000001_shift_4        1060\n",
       "9                pre_close_shift_2        1024\n",
       "13  pre_close_index_000001_shift_4        1016\n",
       "26               pre_close_shift_3         936\n",
       "3                              vol         927\n",
       "25                  amount_shift_5         898\n",
       "4                   amount_shift_1         890\n",
       "14                  amount_shift_2         890\n",
       "20               pre_close_shift_4         869\n",
       "5              pre_close_transform         835\n",
       "24               pre_close_shift_5         830\n",
       "16                  amount_shift_4         820\n",
       "27                  amount_shift_3         788\n",
       "12                  open_transform         564\n",
       "10                         weekday         283"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame({\n",
    "        'column': trn_col,\n",
    "        'importance': clf.feature_importance(),\n",
    "    }).sort_values(by='importance', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型评价"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# oof_lgb_final = np.round(oof_lgb)\n",
    "# print(metrics.accuracy_score(val_label, oof_lgb_final))\n",
    "# print(metrics.confusion_matrix(val_label, oof_lgb_final))\n",
    "# tp = np.sum(((oof_lgb_final == 1) & (val_label == 1)))\n",
    "# pp = np.sum(oof_lgb_final == 1)\n",
    "# print('sensitivity:%.3f'% (tp/(pp)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7122592868526093\n",
      "[[429202   6474]\n",
      " [168483   3878]]\n",
      "accuracy:0.375\n"
     ]
    }
   ],
   "source": [
    "thresh_hold = 0.5\n",
    "# oof_test_final = (test_lgb >= 0.69) & (test_lgb <=0.7)\n",
    "oof_test_final = test_lgb >= thresh_hold\n",
    "print(metrics.accuracy_score(test_label, oof_test_final))\n",
    "print(metrics.confusion_matrix(test_label, oof_test_final))\n",
    "tp = np.sum(((oof_test_final == 1) & (test_label == 1)))\n",
    "pp = np.sum(oof_test_final == 1)\n",
    "print('accuracy:%.3f'% (tp/(pp)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_postive_idx = np.argwhere(oof_test_final == 1).reshape(-1)\n",
    "# test_postive_idx = list(range(len(oof_test_final)))\n",
    "test_all_idx = np.argwhere(test_data_idx).reshape(-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 查看选了哪些股票\n",
    "tmp_col = ['ts_code', 'name', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close',\n",
    "       'change', 'pct_chg', 'amount', 'is_ST', 'label_final']\n",
    "# stock_info.iloc[test_all_idx[test_postive_idx]]\n",
    "\n",
    "tmp_df = stock_info[tmp_col].iloc[test_all_idx[test_postive_idx]].reset_index()\n",
    "tmp_df['label_prob'] = test_lgb[test_postive_idx]\n",
    "# idx_tmp = tmp_df['is_ST'] == 0\n",
    "# tmp_df.loc[idx_tmp, 'is_limit_up'] = (((tmp_df['close'][idx_tmp]-tmp_df['pre_close'][idx_tmp]) / tmp_df['pre_close'][idx_tmp]) > 0.095)\n",
    "# idx_tmp = tmp_df['is_ST'] == 1\n",
    "# tmp_df.loc[idx_tmp, 'is_limit_up'] = (((tmp_df['close'][idx_tmp]-tmp_df['pre_close'][idx_tmp]) / tmp_df['pre_close'][idx_tmp]) > 0.047)\n",
    "\n",
    "tmp_df['is_limit_up'] = tmp_df['close'] == tmp_df['high']\n",
    "\n",
    "buy_df = tmp_df[(tmp_df['is_limit_up']==False)].reset_index()\n",
    "buy_df.drop(['index', 'level_0'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9729 3637\n"
     ]
    }
   ],
   "source": [
    "print(len(buy_df), sum(buy_df['label_final']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 回测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "# stock_info.reset_index().head()\n",
    "# 读取指数信息\n",
    "index_df = pd.read_csv(os.path.join(base_path,  'OldData', '000001.SH' + '_NormalData.csv'))\n",
    "tmp_idx = (index_df['trade_date'] >= test_date_min) & (index_df['trade_date'] <= test_date_max)\n",
    "index_df = index_df.loc[tmp_idx].reset_index()\n",
    "index_df.drop('index', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "tmp_idx = (index_df['trade_date'] == test_date_min+1)\n",
    "close1 = index_df[tmp_idx]['close'].values[0]\n",
    "tmp_idx = (index_df['trade_date'] == test_date_max)\n",
    "close2 = index_df[tmp_idx]['close'].values[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20190129  买入 新华文轩 (601811.SH) 1800股，股价：10.7465,花费：19343.7,手续费：5.8，剩余现金：80650.5\n",
      "20190129  买入 三利谱 (002876.SZ) 700股，股价：27.7515,花费：19426.05,手续费：5.83，剩余现金：61218.62\n",
      "20190129  买入 中衡设计 (603017.SH) 1400股，股价：13.6447,花费：19102.58,手续费：5.73，剩余现金：42110.31\n",
      "20190130  止损卖出中衡设计 (603017.SH) 1400股，股价：12.4327,收入：17405.78,手续费：22.63，剩余现金：59493.46，最终亏损：-1725.16\n",
      "20190201  止损卖出新华文轩 (601811.SH) 1800股，股价：9.886779999999998,收入：17796.2,手续费：23.14，剩余现金：77266.53，最终亏损：-1576.43\n",
      "20190211  止盈卖出三利谱 (002876.SZ) 700股，股价：31.081680000000002,收入：21757.18,手续费：28.28，剩余现金：98995.42，最终盈利：2297.01\n",
      "20190214  买入 *ST天首 (000611.SZ) 4800股，股价：4.07,花费：19536.0,手续费：5.86，剩余现金：79453.56\n",
      "20190214  买入 *ST盈方 (000670.SZ) 5800股，股价：3.38,花费：19604.0,手续费：5.88，剩余现金：59843.68\n",
      "20190215  买入 引力传媒 (603598.SH) 2400股，股价：8.11,花费：19464.0,手续费：5.84，剩余现金：40373.84\n",
      "20190215  买入 芭田股份 (002170.SZ) 5200股，股价：3.83,花费：19916.0,手续费：5.97，剩余现金：20451.87\n",
      "20190215  买入 华金资本 (000532.SZ) 2000股，股价：9.6614,花费：19322.8,手续费：5.8，剩余现金：1123.27\n",
      "20190219  止盈卖出华金资本 (000532.SZ) 2000股，股价：10.820768000000001,收入：21641.54,手续费：28.13，剩余现金：22736.67，最终盈利：2284.81\n",
      "20190219  止盈卖出芭田股份 (002170.SZ) 5200股，股价：4.2896,收入：22305.92,手续费：29.0，剩余现金：45013.59，最终盈利：2354.95\n",
      "20190219  止盈卖出*ST盈方 (000670.SZ) 5800股，股价：3.7856,收入：21956.48,手续费：28.54，剩余现金：66941.53，最终盈利：2318.06\n",
      "20190222  止盈卖出引力传媒 (603598.SH) 2400股，股价：9.32,收入：22368.0,手续费：29.08，剩余现金：89280.45，最终盈利：2869.08\n",
      "20190225  止盈卖出*ST天首 (000611.SZ) 4800股，股价：4.558400000000001,收入：21880.32,手续费：28.44，剩余现金：111132.33，最终盈利：2310.01\n",
      "20190227  买入 伟星新材 (002372.SZ) 1600股，股价：13.1786,花费：21085.76,手续费：6.33，剩余现金：90040.24\n",
      "20190301  买入 远大智能 (002689.SZ) 4400股，股价：5.0,花费：22000.0,手续费：6.6，剩余现金：68033.64\n",
      "20190301  买入 美诺华 (603538.SH) 1100股，股价：19.1999,花费：21119.89,手续费：6.34，剩余现金：46907.41\n",
      "20190301  买入 八菱科技 (002592.SZ) 1100股，股价：19.7,花费：21670.0,手续费：6.5，剩余现金：25230.91\n",
      "20190301  买入 天邦股份 (002124.SZ) 2000股，股价：10.78,花费：21560.0,手续费：6.47，剩余现金：3664.45\n",
      "20190304  止盈卖出天邦股份 (002124.SZ) 2000股，股价：12.0736,收入：24147.2,手续费：31.39，剩余现金：27780.25，最终盈利：2549.34\n",
      "20190305  止盈卖出远大智能 (002689.SZ) 4400股，股价：5.6000000000000005,收入：24640.0,手续费：32.03，剩余现金：52388.22，最终盈利：2601.37\n",
      "20190311  止盈卖出美诺华 (603538.SH) 1100股，股价：21.503888,收入：23654.28,手续费：30.75，剩余现金：76011.75，最终盈利：2497.3\n",
      "20190312  买入 渤海股份 (000605.SZ) 2200股，股价：10.4434,花费：22975.48,手续费：6.89，剩余现金：53029.38\n",
      "20190312  买入 荣安地产 (000517.SZ) 7900股，股价：2.96,花费：23384.0,手续费：7.02，剩余现金：29638.36\n",
      "20190312  买入 雄韬股份 (002733.SZ) 1000股，股价：23.6367,花费：23636.7,手续费：7.09，剩余现金：5994.57\n",
      "20190312  买入 香飘飘 (603711.SH) 200股，股价：22.6175,花费：4523.5,手续费：5，剩余现金：1466.07\n",
      "20190313  止盈卖出八菱科技 (002592.SZ) 1100股，股价：23.0,收入：25300.0,手续费：32.89，剩余现金：26733.18，最终盈利：3590.61\n",
      "20190314  买入 东材科技 (601208.SH) 4800股，股价：5.2085,花费：25000.8,手续费：7.5，剩余现金：1724.88\n",
      "20190314  止盈卖出香飘飘 (603711.SH) 200股，股价：25.3316,收入：5066.32,手续费：10.07，剩余现金：6781.13，最终盈利：527.75\n",
      "20190315  买入 弘业股份 (600128.SH) 700股，股价：9.65,花费：6755.0,手续费：5，剩余现金：21.13\n",
      "20190315  止损卖出雄韬股份 (002733.SZ) 1000股，股价：21.6703,收入：21670.3,手续费：28.17，剩余现金：21663.26，最终亏损：-2001.66\n",
      "20190318  买入 紫鑫药业 (002118.SZ) 2800股，股价：7.5,花费：21000.0,手续费：6.3，剩余现金：656.96\n",
      "20190319  止盈卖出荣安地产 (000517.SZ) 7900股，股价：3.3152000000000004,收入：26190.08,手续费：34.05，剩余现金：26812.99，最终盈利：2765.02\n",
      "20190320  买入 *ST中绒 (000982.SZ) 17600股，股价：1.44,花费：25344.0,手续费：7.6，剩余现金：1461.39\n",
      "20190320  止盈卖出紫鑫药业 (002118.SZ) 2800股，股价：8.4,收入：23520.0,手续费：30.58，剩余现金：24950.82，最终盈利：2483.12\n",
      "20190320  止盈卖出伟星新材 (002372.SZ) 1600股，股价：14.760032,收入：23616.05,手续费：30.7，剩余现金：48536.17，最终盈利：2493.26\n",
      "20190321  买入 格尔软件 (603232.SH) 1000股，股价：24.4464,花费：24446.4,手续费：7.33，剩余现金：24082.43\n",
      "20190321  买入 新华网 (603888.SH) 1000股，股价：23.687,花费：23687.0,手续费：7.11，剩余现金：388.33\n",
      "20190322  止盈卖出新华网 (603888.SH) 1000股，股价：26.6479,收入：26647.9,手续费：34.64，剩余现金：27001.58，最终盈利：2919.15\n",
      "20190322  止盈卖出弘业股份 (600128.SH) 700股，股价：10.808000000000002,收入：7565.6,手续费：12.57，剩余现金：34554.62，最终盈利：793.03\n",
      "20190322  止盈卖出渤海股份 (000605.SZ) 2200股，股价：11.696608000000001,收入：25732.54,手续费：33.45，剩余现金：60253.7，最终盈利：2716.71\n",
      "20190325  买入 天顺风能 (002531.SZ) 4100股，股价：6.6329,花费：27194.89,手续费：8.16，剩余现金：33050.65\n",
      "20190325  止盈卖出*ST中绒 (000982.SZ) 17600股，股价：1.6128,收入：28385.28,手续费：36.9，剩余现金：61399.03，最终盈利：2996.78\n",
      "20190326  止盈卖出格尔软件 (603232.SH) 1000股，股价：27.379968,收入：27379.97,手续费：35.59，剩余现金：88743.41，最终盈利：2890.64\n",
      "20190328  买入 绿庭投资 (600695.SH) 3800股，股价：7.2,花费：27360.0,手续费：8.21，剩余现金：61375.2\n",
      "20190328  买入 当代明诚 (600136.SH) 2100股，股价：12.8542,花费：26993.82,手续费：8.1，剩余现金：34373.28\n",
      "20190328  买入 摩登大道 (002656.SZ) 4300股，股价：6.43,花费：27649.0,手续费：8.29，剩余现金：6715.99\n",
      "20190328  买入 市北高新 (600604.SH) 400股，股价：14.2696,花费：5707.84,手续费：5，剩余现金：1003.15\n",
      "20190401  止盈卖出绿庭投资 (600695.SH) 3800股，股价：8.064000000000002,收入：30643.2,手续费：39.84，剩余现金：31606.51，最终盈利：3235.16\n",
      "20190402  止盈卖出市北高新 (600604.SH) 400股，股价：15.981952000000001,收入：6392.78,手续费：11.39，剩余现金：37987.9，最终盈利：668.55\n",
      "20190404  止损卖出天顺风能 (002531.SZ) 4100股，股价：6.102268,收入：25019.3,手续费：32.53，剩余现金：62974.67，最终亏损：-2216.27\n",
      "20190410  买入 *ST工新 (600701.SH) 10700股，股价：2.73,花费：29211.0,手续费：8.76，剩余现金：33754.91\n",
      "20190410  买入 通用股份 (601500.SH) 3600股，股价：8.1438,花费：29317.68,手续费：8.8，剩余现金：4428.43\n",
      "20190410  止盈卖出摩登大道 (002656.SZ) 4300股，股价：7.2016,收入：30966.88,手续费：40.26，剩余现金：35355.06，最终盈利：3269.33\n",
      "20190411  止盈卖出当代明诚 (600136.SH) 2100股，股价：14.4809,收入：30409.89,手续费：39.53，剩余现金：65725.41，最终盈利：3368.44\n",
      "20190411  到期卖出东材科技 (601208.SH) 4800股，股价：5.3581,收入：25718.88,手续费：33.43，剩余现金：91410.86，最终盈利：677.15\n",
      "20190417  买入 新筑股份 (002480.SZ) 4900股，股价：6.03,花费：29547.0,手续费：8.86，剩余现金：61855.0\n",
      "20190417  买入 延长化建 (600248.SH) 6000股，股价：4.9992,花费：29995.2,手续费：9.0，剩余现金：31850.8\n",
      "20190417  买入 顶点软件 (603383.SH) 200股，股价：111.8784,花费：22375.68,手续费：6.71，剩余现金：9468.4\n",
      "20190417  买入 顺钠股份 (000533.SZ) 2500股，股价：3.66,花费：9150.0,手续费：5，剩余现金：313.4\n",
      "20190418  止盈卖出新筑股份 (002480.SZ) 4900股，股价：6.9,收入：33810.0,手续费：43.95，剩余现金：34079.45，最终盈利：4210.18\n",
      "20190418  止盈卖出*ST工新 (600701.SH) 10700股，股价：3.0576000000000003,收入：32716.32,手续费：42.53，剩余现金：66753.24，最终盈利：3454.03\n",
      "20190422  止盈卖出顺钠股份 (000533.SZ) 2500股，股价：4.099200000000001,收入：10248.0,手续费：15.25，剩余现金：76985.99，最终盈利：1077.75\n",
      "20190422  止损卖出顶点软件 (603383.SH) 200股，股价：102.92812799999999,收入：20585.63,手续费：26.76，剩余现金：97544.86，最终亏损：-1823.53\n",
      "20190422  止盈卖出延长化建 (600248.SH) 6000股，股价：5.5991040000000005,收入：33594.62,手续费：43.67，剩余现金：131095.81，最终盈利：3546.75\n",
      "20190424  买入 凯龙股份 (002783.SZ) 1600股，股价：18.7494,花费：29999.04,手续费：9.0，剩余现金：101087.77\n",
      "20190425  止损卖出凯龙股份 (002783.SZ) 1600股，股价：17.249448,收入：27599.12,手续费：35.88，剩余现金：128651.01，最终亏损：-2444.8\n",
      "20190425  止损卖出通用股份 (601500.SH) 3600股，股价：7.492296,收入：26972.27,手续费：35.06，剩余现金：155588.21，最终亏损：-2389.27\n",
      "20190430  买入 东华科技 (002140.SZ) 3600股，股价：8.5817,花费：30894.12,手续费：9.27，剩余现金：124684.82\n",
      "20190430  买入 汇源通信 (000586.SZ) 2900股，股价：10.54,花费：30566.0,手续费：9.17，剩余现金：94109.65\n",
      "20190430  买入 英联股份 (002846.SZ) 2100股，股价：14.6754,花费：30818.34,手续费：9.25，剩余现金：63282.06\n",
      "20190430  买入 摩登大道 (002656.SZ) 4800股，股价：6.41,花费：30768.0,手续费：9.23，剩余现金：32504.83\n",
      "20190430  买入 启迪古汉 (000590.SZ) 2200股，股价：13.66,花费：30052.0,手续费：9.02，剩余现金：2443.82\n",
      "20190506  止损卖出英联股份 (002846.SZ) 2100股，股价：13.501368,收入：28352.87,手续费：36.86，剩余现金：30759.83，最终亏损：-2511.57\n",
      "20190506  止损卖出汇源通信 (000586.SZ) 2900股，股价：9.696799999999998,收入：28120.72,手续费：36.56，剩余现金：58844.0，最终亏损：-2491.01\n",
      "20190506  止损卖出东华科技 (002140.SZ) 3600股，股价：7.7227,收入：27801.72,手续费：36.14，剩余现金：86609.57，最终亏损：-3137.81\n",
      "20190507  买入 世嘉科技 (002796.SZ) 800股，股价：33.91,花费：27128.0,手续费：8.14，剩余现金：59473.43\n",
      "20190507  买入 大港股份 (002077.SZ) 5500股，股价：5.21,花费：28655.0,手续费：8.6，剩余现金：30809.84\n",
      "20190507  买入 民生控股 (000416.SZ) 5100股，股价：5.6416,花费：28772.16,手续费：8.63，剩余现金：2029.05\n",
      "20190507  止损卖出摩登大道 (002656.SZ) 4800股，股价：5.8972,收入：28306.56,手续费：36.8，剩余现金：30298.81，最终亏损：-2507.47\n",
      "20190508  止盈卖出大港股份 (002077.SZ) 5500股，股价：5.8352,收入：32093.6,手续费：41.72，剩余现金：62350.69，最终盈利：3388.28\n",
      "20190508  止损卖出世嘉科技 (002796.SZ) 800股，股价：31.197199999999995,收入：24957.76,手续费：32.45，剩余现金：87276.0，最终亏损：-2210.82\n",
      "20190509  买入 华东科技 (000727.SZ) 12700股，股价：2.28,花费：28956.0,手续费：8.69，剩余现金：58311.31\n",
      "20190509  买入 八菱科技 (002592.SZ) 1500股，股价：18.99,花费：28485.0,手续费：8.55，剩余现金：29817.77\n",
      "20190509  买入 福田汽车 (600166.SH) 11300股，股价：2.57,花费：29041.0,手续费：8.71，剩余现金：768.06\n",
      "20190517  止损卖出启迪古汉 (000590.SZ) 2200股，股价：12.5672,收入：27647.84,手续费：35.94，剩余现金：28379.95，最终亏损：-2449.12\n",
      "20190520  止损卖出福田汽车 (600166.SH) 11300股，股价：2.3644,收入：26717.72,手续费：34.73，剩余现金：55062.94，最终亏损：-2366.73\n",
      "20190520  止损卖出八菱科技 (002592.SZ) 1500股，股价：17.470799999999997,收入：26206.2,手续费：34.07，剩余现金：81235.07，最终亏损：-2321.41\n",
      "20190521  买入 春兴精工 (002547.SZ) 2100股，股价：12.63,花费：26523.0,手续费：7.96，剩余现金：54704.12\n",
      "20190521  买入 来伊份 (603777.SH) 2100股，股价：12.6082,花费：26477.22,手续费：7.94，剩余现金：28218.95\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20190521  买入 中贝通信 (603220.SH) 1000股，股价：25.7214,花费：25721.4,手续费：7.72，剩余现金：2489.84\n",
      "20190527  止损卖出春兴精工 (002547.SZ) 2100股，股价：11.6196,收入：24401.16,手续费：31.72，剩余现金：26859.28，最终亏损：-2161.52\n",
      "20190528  买入 中钢天源 (002057.SZ) 2700股，股价：9.785,花费：26419.5,手续费：7.93，剩余现金：431.85\n",
      "20190529  止盈卖出中钢天源 (002057.SZ) 2700股，股价：10.959200000000001,收入：29589.84,手续费：38.47，剩余现金：29983.22，最终盈利：3123.95\n",
      "20190529  止盈卖出中贝通信 (603220.SH) 1000股，股价：29.0547,收入：29054.7,手续费：37.77，剩余现金：59000.15，最终盈利：3287.81\n",
      "20190530  止损卖出民生控股 (000416.SZ) 5100股，股价：5.190272,收入：26470.39,手续费：34.41，剩余现金：85436.13，最终亏损：-2344.82\n",
      "20190603  止损卖出华东科技 (000727.SZ) 12700股，股价：2.0975999999999995,收入：26639.52,手续费：34.63，剩余现金：112041.02，最终亏损：-2359.8\n",
      "20190604  买入 沙钢股份 (002075.SZ) 3000股，股价：9.1,花费：27300.0,手续费：8.19，剩余现金：84732.83\n",
      "20190604  买入 大港股份 (002077.SZ) 3700股，股价：7.25,花费：26825.0,手续费：8.05，剩余现金：57899.78\n",
      "20190604  买入 华阳集团 (002906.SZ) 2500股，股价：10.72,花费：26800.0,手续费：8.04，剩余现金：31091.74\n",
      "20190611  止盈卖出来伊份 (603777.SH) 2100股，股价：14.121184000000001,收入：29654.49,手续费：38.55，剩余现金：60707.67，最终盈利：3130.77\n",
      "20190612  买入 银宝山新 (002786.SZ) 3800股，股价：7.47,花费：28386.0,手续费：8.52，剩余现金：32313.16\n",
      "20190612  止盈卖出大港股份 (002077.SZ) 3700股，股价：8.120000000000001,收入：30044.0,手续费：39.06，剩余现金：62318.1，最终盈利：3171.9\n",
      "20190613  止盈卖出华阳集团 (002906.SZ) 2500股，股价：12.006400000000001,收入：30016.0,手续费：39.02，剩余现金：92295.08，最终盈利：3168.94\n",
      "20190614  止损卖出沙钢股份 (002075.SZ) 3000股，股价：8.372,收入：25116.0,手续费：32.65，剩余现金：117378.43，最终亏损：-2224.84\n",
      "20190620  买入 百傲化学 (603360.SH) 1100股，股价：25.408,花费：27948.8,手续费：8.38，剩余现金：89421.24\n",
      "20190620  买入 南威软件 (603636.SH) 2900股，股价：9.89,花费：28681.0,手续费：8.6，剩余现金：60731.64\n",
      "20190620  买入 星湖科技 (600866.SH) 5700股，股价：5.11,花费：29127.0,手续费：8.74，剩余现金：31595.9\n",
      "20190620  买入 金桥信息 (603918.SH) 2600股，股价：11.0,花费：28600.0,手续费：8.58，剩余现金：2987.32\n",
      "20190626  止盈卖出星湖科技 (600866.SH) 5700股，股价：5.723200000000001,收入：32622.24,手续费：42.41，剩余现金：35567.15，最终盈利：3444.09\n",
      "20190628  买入 ST椰岛 (600238.SH) 3600股，股价：8.3,花费：29880.0,手续费：8.96，剩余现金：5678.19\n",
      "20190702  止盈卖出百傲化学 (603360.SH) 1100股，股价：28.456960000000006,收入：31302.66,手续费：40.69，剩余现金：36940.15，最终盈利：3304.78\n",
      "20190703  买入 中船防务 (600685.SH) 1900股，股价：16.19,花费：30761.0,手续费：9.23，剩余现金：6169.92\n",
      "20190704  止盈卖出中船防务 (600685.SH) 1900股，股价：18.132800000000003,收入：34452.32,手续费：44.79，剩余现金：40577.46，最终盈利：3637.3\n",
      "20190709  买入 君禾股份 (603617.SH) 1600股，股价：18.83,花费：30128.0,手续费：9.04，剩余现金：10440.42\n",
      "20190709  止损卖出金桥信息 (603918.SH) 2600股，股价：10.12,收入：26312.0,手续费：34.21，剩余现金：36718.21，最终亏损：-2330.79\n",
      "20190709  到期卖出银宝山新 (002786.SZ) 3800股，股价：7.23,收入：27474.0,手续费：35.72，剩余现金：64156.5，最终亏损：-956.23\n",
      "20190715  止损卖出君禾股份 (603617.SH) 1600股，股价：17.323599999999995,收入：27717.76,手续费：36.03，剩余现金：91838.22，最终亏损：-2455.31\n",
      "20190717  到期卖出南威软件 (603636.SH) 2900股，股价：9.8,收入：28420.0,手续费：36.95，剩余现金：120221.28，最终亏损：-306.55\n",
      "20190725  止盈卖出ST椰岛 (600238.SH) 3600股，股价：9.296000000000001,收入：33465.6,手续费：43.51，剩余现金：153643.37，最终盈利：3533.13\n",
      "20190807  买入 跃岭股份 (002725.SZ) 2700股，股价：11.04,花费：29808.0,手续费：8.94，剩余现金：123826.43\n",
      "20190807  买入 *ST仰帆 (600421.SH) 3800股，股价：7.99,花费：30362.0,手续费：9.11，剩余现金：93455.32\n",
      "20190807  买入 山煤国际 (600546.SH) 4400股，股价：6.89,花费：30316.0,手续费：9.09，剩余现金：63130.23\n",
      "20190807  买入 德美化工 (002054.SZ) 3900股，股价：7.7,花费：30030.0,手续费：9.01，剩余现金：33091.22\n",
      "20190807  买入 ST亚星 (600319.SH) 6500股，股价：4.66,花费：30290.0,手续费：9.09，剩余现金：2792.13\n",
      "20190820  止盈卖出山煤国际 (600546.SH) 4400股，股价：7.7168,收入：33953.92,手续费：44.14，剩余现金：36701.91，最终盈利：3584.69\n",
      "20190820  止盈卖出跃岭股份 (002725.SZ) 2700股，股价：12.3648,收入：33384.96,手续费：43.4，剩余现金：70043.47，最终盈利：3524.62\n",
      "20190821  止盈卖出*ST仰帆 (600421.SH) 3800股，股价：8.9488,收入：34005.44,手续费：44.21，剩余现金：104004.7，最终盈利：3590.12\n",
      "20190903  到期卖出ST亚星 (600319.SH) 6500股，股价：4.95,收入：32175.0,手续费：41.83，剩余现金：136137.87，最终盈利：1834.09\n",
      "20190903  到期卖出德美化工 (002054.SZ) 3900股，股价：8.02,收入：31278.0,手续费：40.66，剩余现金：167375.21，最终盈利：1198.33\n",
      "20190906  买入 浙江广厦 (600052.SH) 7600股，股价：4.39,花费：33364.0,手续费：10.01，剩余现金：134001.2\n",
      "20190909  止盈卖出浙江广厦 (600052.SH) 7600股，股价：4.9168,收入：37367.68,手续费：48.58，剩余现金：171320.31，最终盈利：3945.09\n",
      "20190916  买入 大智慧 (601519.SH) 3600股，股价：9.4,花费：33840.0,手续费：10.15，剩余现金：137470.15\n",
      "20190916  买入 中信建投 (601066.SH) 1300股，股价：25.63,花费：33319.0,手续费：10.0，剩余现金：104141.16\n",
      "20190918  止损卖出大智慧 (601519.SH) 3600股，股价：8.648,收入：31132.8,手续费：40.47，剩余现金：135233.49，最终亏损：-2757.82\n",
      "20190925  止损卖出中信建投 (601066.SH) 1300股，股价：23.579599999999996,收入：30653.48,手续费：39.85，剩余现金：165847.12，最终亏损：-2715.37\n",
      "20190927  买入 金奥博 (002917.SZ) 1700股，股价：18.68,花费：31756.0,手续费：9.53，剩余现金：134081.59\n",
      "20191014  买入 新农股份 (002942.SZ) 900股，股价：34.29,花费：30861.0,手续费：9.26，剩余现金：103211.33\n",
      "20191015  止损卖出金奥博 (002917.SZ) 1700股，股价：17.185599999999997,收入：29215.52,手续费：37.98，剩余现金：132388.87，最终亏损：-2587.99\n",
      "20191021  止损卖出新农股份 (002942.SZ) 900股，股价：31.546799999999998,收入：28392.12,手续费：36.91，剩余现金：160744.08，最终亏损：-2515.05\n",
      "20191031  买入 东港股份 (002117.SZ) 2300股，股价：13.65,花费：31395.0,手续费：9.42，剩余现金：129339.66\n",
      "20191104  止损卖出东港股份 (002117.SZ) 2300股，股价：12.558,收入：28883.4,手续费：37.55，剩余现金：158185.51，最终亏损：-2558.57\n"
     ]
    }
   ],
   "source": [
    "from imp import reload\n",
    "import Account\n",
    "reload(Account)\n",
    "money_init = 100000\n",
    "account = Account.Account(money_init, max_hold_period=20, stop_loss_rate=-0.07, stop_profit_rate=0.12)\n",
    "account.BackTest(buy_df, stock_info_copy, index_df, buy_price='open')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "tmp_df2 = buy_df[['ts_code', 'trade_date', 'label_prob', 'label_final']]\n",
    "tmp_df2 = tmp_df2.rename(columns={'trade_date':'buy_date'})\n",
    "tmp_df = account.info\n",
    "tmp_df = tmp_df.merge(tmp_df2, on=['ts_code', 'buy_date'], how='left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ts_code</th>\n",
       "      <th>name</th>\n",
       "      <th>buy_price</th>\n",
       "      <th>buy_date</th>\n",
       "      <th>buy_num</th>\n",
       "      <th>sell_price</th>\n",
       "      <th>sell_date</th>\n",
       "      <th>profit</th>\n",
       "      <th>label_prob</th>\n",
       "      <th>label_final</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>601811.SH</td>\n",
       "      <td>新华文轩</td>\n",
       "      <td>10.7465</td>\n",
       "      <td>20190129</td>\n",
       "      <td>1800</td>\n",
       "      <td>9.88678</td>\n",
       "      <td>20190201</td>\n",
       "      <td>-1576.43</td>\n",
       "      <td>0.712017</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>002876.SZ</td>\n",
       "      <td>三利谱</td>\n",
       "      <td>27.7515</td>\n",
       "      <td>20190129</td>\n",
       "      <td>700</td>\n",
       "      <td>31.0817</td>\n",
       "      <td>20190211</td>\n",
       "      <td>2297.01</td>\n",
       "      <td>0.545878</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>603017.SH</td>\n",
       "      <td>中衡设计</td>\n",
       "      <td>13.6447</td>\n",
       "      <td>20190129</td>\n",
       "      <td>1400</td>\n",
       "      <td>12.4327</td>\n",
       "      <td>20190130</td>\n",
       "      <td>-1725.16</td>\n",
       "      <td>0.532394</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>000611.SZ</td>\n",
       "      <td>*ST天首</td>\n",
       "      <td>4.07</td>\n",
       "      <td>20190214</td>\n",
       "      <td>4800</td>\n",
       "      <td>4.5584</td>\n",
       "      <td>20190225</td>\n",
       "      <td>2310.01</td>\n",
       "      <td>0.612210</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>000670.SZ</td>\n",
       "      <td>*ST盈方</td>\n",
       "      <td>3.38</td>\n",
       "      <td>20190214</td>\n",
       "      <td>5800</td>\n",
       "      <td>3.7856</td>\n",
       "      <td>20190219</td>\n",
       "      <td>2318.06</td>\n",
       "      <td>0.507976</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>603598.SH</td>\n",
       "      <td>引力传媒</td>\n",
       "      <td>8.11</td>\n",
       "      <td>20190215</td>\n",
       "      <td>2400</td>\n",
       "      <td>9.32</td>\n",
       "      <td>20190222</td>\n",
       "      <td>2869.08</td>\n",
       "      <td>0.576635</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>002170.SZ</td>\n",
       "      <td>芭田股份</td>\n",
       "      <td>3.83</td>\n",
       "      <td>20190215</td>\n",
       "      <td>5200</td>\n",
       "      <td>4.2896</td>\n",
       "      <td>20190219</td>\n",
       "      <td>2354.95</td>\n",
       "      <td>0.576223</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>000532.SZ</td>\n",
       "      <td>华金资本</td>\n",
       "      <td>9.6614</td>\n",
       "      <td>20190215</td>\n",
       "      <td>2000</td>\n",
       "      <td>10.8208</td>\n",
       "      <td>20190219</td>\n",
       "      <td>2284.81</td>\n",
       "      <td>0.572501</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>002372.SZ</td>\n",
       "      <td>伟星新材</td>\n",
       "      <td>13.1786</td>\n",
       "      <td>20190227</td>\n",
       "      <td>1600</td>\n",
       "      <td>14.76</td>\n",
       "      <td>20190320</td>\n",
       "      <td>2493.26</td>\n",
       "      <td>0.629295</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>002689.SZ</td>\n",
       "      <td>远大智能</td>\n",
       "      <td>5</td>\n",
       "      <td>20190301</td>\n",
       "      <td>4400</td>\n",
       "      <td>5.6</td>\n",
       "      <td>20190305</td>\n",
       "      <td>2601.37</td>\n",
       "      <td>0.666809</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>603538.SH</td>\n",
       "      <td>美诺华</td>\n",
       "      <td>19.1999</td>\n",
       "      <td>20190301</td>\n",
       "      <td>1100</td>\n",
       "      <td>21.5039</td>\n",
       "      <td>20190311</td>\n",
       "      <td>2497.3</td>\n",
       "      <td>0.612722</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>002592.SZ</td>\n",
       "      <td>八菱科技</td>\n",
       "      <td>19.7</td>\n",
       "      <td>20190301</td>\n",
       "      <td>1100</td>\n",
       "      <td>23</td>\n",
       "      <td>20190313</td>\n",
       "      <td>3590.61</td>\n",
       "      <td>0.591508</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>002124.SZ</td>\n",
       "      <td>天邦股份</td>\n",
       "      <td>10.78</td>\n",
       "      <td>20190301</td>\n",
       "      <td>2000</td>\n",
       "      <td>12.0736</td>\n",
       "      <td>20190304</td>\n",
       "      <td>2549.34</td>\n",
       "      <td>0.585449</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>000605.SZ</td>\n",
       "      <td>渤海股份</td>\n",
       "      <td>10.4434</td>\n",
       "      <td>20190312</td>\n",
       "      <td>2200</td>\n",
       "      <td>11.6966</td>\n",
       "      <td>20190322</td>\n",
       "      <td>2716.71</td>\n",
       "      <td>0.557822</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>000517.SZ</td>\n",
       "      <td>荣安地产</td>\n",
       "      <td>2.96</td>\n",
       "      <td>20190312</td>\n",
       "      <td>7900</td>\n",
       "      <td>3.3152</td>\n",
       "      <td>20190319</td>\n",
       "      <td>2765.02</td>\n",
       "      <td>0.536431</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>002733.SZ</td>\n",
       "      <td>雄韬股份</td>\n",
       "      <td>23.6367</td>\n",
       "      <td>20190312</td>\n",
       "      <td>1000</td>\n",
       "      <td>21.6703</td>\n",
       "      <td>20190315</td>\n",
       "      <td>-2001.66</td>\n",
       "      <td>0.526323</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>603711.SH</td>\n",
       "      <td>香飘飘</td>\n",
       "      <td>22.6175</td>\n",
       "      <td>20190312</td>\n",
       "      <td>200</td>\n",
       "      <td>25.3316</td>\n",
       "      <td>20190314</td>\n",
       "      <td>527.754</td>\n",
       "      <td>0.524474</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>601208.SH</td>\n",
       "      <td>东材科技</td>\n",
       "      <td>5.2085</td>\n",
       "      <td>20190314</td>\n",
       "      <td>4800</td>\n",
       "      <td>5.3581</td>\n",
       "      <td>20190411</td>\n",
       "      <td>677.145</td>\n",
       "      <td>0.637131</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>600128.SH</td>\n",
       "      <td>弘业股份</td>\n",
       "      <td>9.65</td>\n",
       "      <td>20190315</td>\n",
       "      <td>700</td>\n",
       "      <td>10.808</td>\n",
       "      <td>20190322</td>\n",
       "      <td>793.034</td>\n",
       "      <td>0.776784</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>002118.SZ</td>\n",
       "      <td>紫鑫药业</td>\n",
       "      <td>7.5</td>\n",
       "      <td>20190318</td>\n",
       "      <td>2800</td>\n",
       "      <td>8.4</td>\n",
       "      <td>20190320</td>\n",
       "      <td>2483.12</td>\n",
       "      <td>0.567215</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>000982.SZ</td>\n",
       "      <td>*ST中绒</td>\n",
       "      <td>1.44</td>\n",
       "      <td>20190320</td>\n",
       "      <td>17600</td>\n",
       "      <td>1.6128</td>\n",
       "      <td>20190325</td>\n",
       "      <td>2996.78</td>\n",
       "      <td>0.551106</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>603232.SH</td>\n",
       "      <td>格尔软件</td>\n",
       "      <td>24.4464</td>\n",
       "      <td>20190321</td>\n",
       "      <td>1000</td>\n",
       "      <td>27.38</td>\n",
       "      <td>20190326</td>\n",
       "      <td>2890.64</td>\n",
       "      <td>0.672865</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>603888.SH</td>\n",
       "      <td>新华网</td>\n",
       "      <td>23.687</td>\n",
       "      <td>20190321</td>\n",
       "      <td>1000</td>\n",
       "      <td>26.6479</td>\n",
       "      <td>20190322</td>\n",
       "      <td>2919.15</td>\n",
       "      <td>0.570559</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>002531.SZ</td>\n",
       "      <td>天顺风能</td>\n",
       "      <td>6.6329</td>\n",
       "      <td>20190325</td>\n",
       "      <td>4100</td>\n",
       "      <td>6.10227</td>\n",
       "      <td>20190404</td>\n",
       "      <td>-2216.27</td>\n",
       "      <td>0.613390</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>600695.SH</td>\n",
       "      <td>绿庭投资</td>\n",
       "      <td>7.2</td>\n",
       "      <td>20190328</td>\n",
       "      <td>3800</td>\n",
       "      <td>8.064</td>\n",
       "      <td>20190401</td>\n",
       "      <td>3235.16</td>\n",
       "      <td>0.716304</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>600136.SH</td>\n",
       "      <td>当代明诚</td>\n",
       "      <td>12.8542</td>\n",
       "      <td>20190328</td>\n",
       "      <td>2100</td>\n",
       "      <td>14.4809</td>\n",
       "      <td>20190411</td>\n",
       "      <td>3368.44</td>\n",
       "      <td>0.709479</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>002656.SZ</td>\n",
       "      <td>摩登大道</td>\n",
       "      <td>6.43</td>\n",
       "      <td>20190328</td>\n",
       "      <td>4300</td>\n",
       "      <td>7.2016</td>\n",
       "      <td>20190410</td>\n",
       "      <td>3269.33</td>\n",
       "      <td>0.706717</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>600604.SH</td>\n",
       "      <td>市北高新</td>\n",
       "      <td>14.2696</td>\n",
       "      <td>20190328</td>\n",
       "      <td>400</td>\n",
       "      <td>15.982</td>\n",
       "      <td>20190402</td>\n",
       "      <td>668.548</td>\n",
       "      <td>0.703958</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>600701.SH</td>\n",
       "      <td>*ST工新</td>\n",
       "      <td>2.73</td>\n",
       "      <td>20190410</td>\n",
       "      <td>10700</td>\n",
       "      <td>3.0576</td>\n",
       "      <td>20190418</td>\n",
       "      <td>3454.03</td>\n",
       "      <td>0.667350</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>601500.SH</td>\n",
       "      <td>通用股份</td>\n",
       "      <td>8.1438</td>\n",
       "      <td>20190410</td>\n",
       "      <td>3600</td>\n",
       "      <td>7.4923</td>\n",
       "      <td>20190425</td>\n",
       "      <td>-2389.27</td>\n",
       "      <td>0.642757</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>000416.SZ</td>\n",
       "      <td>民生控股</td>\n",
       "      <td>5.6416</td>\n",
       "      <td>20190507</td>\n",
       "      <td>5100</td>\n",
       "      <td>5.19027</td>\n",
       "      <td>20190530</td>\n",
       "      <td>-2344.82</td>\n",
       "      <td>0.801270</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>000727.SZ</td>\n",
       "      <td>华东科技</td>\n",
       "      <td>2.28</td>\n",
       "      <td>20190509</td>\n",
       "      <td>12700</td>\n",
       "      <td>2.0976</td>\n",
       "      <td>20190603</td>\n",
       "      <td>-2359.8</td>\n",
       "      <td>0.683244</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>002592.SZ</td>\n",
       "      <td>八菱科技</td>\n",
       "      <td>18.99</td>\n",
       "      <td>20190509</td>\n",
       "      <td>1500</td>\n",
       "      <td>17.4708</td>\n",
       "      <td>20190520</td>\n",
       "      <td>-2321.41</td>\n",
       "      <td>0.676076</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>600166.SH</td>\n",
       "      <td>福田汽车</td>\n",
       "      <td>2.57</td>\n",
       "      <td>20190509</td>\n",
       "      <td>11300</td>\n",
       "      <td>2.3644</td>\n",
       "      <td>20190520</td>\n",
       "      <td>-2366.73</td>\n",
       "      <td>0.664682</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>002547.SZ</td>\n",
       "      <td>春兴精工</td>\n",
       "      <td>12.63</td>\n",
       "      <td>20190521</td>\n",
       "      <td>2100</td>\n",
       "      <td>11.6196</td>\n",
       "      <td>20190527</td>\n",
       "      <td>-2161.52</td>\n",
       "      <td>0.647187</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>603777.SH</td>\n",
       "      <td>来伊份</td>\n",
       "      <td>12.6082</td>\n",
       "      <td>20190521</td>\n",
       "      <td>2100</td>\n",
       "      <td>14.1212</td>\n",
       "      <td>20190611</td>\n",
       "      <td>3130.77</td>\n",
       "      <td>0.568171</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>603220.SH</td>\n",
       "      <td>中贝通信</td>\n",
       "      <td>25.7214</td>\n",
       "      <td>20190521</td>\n",
       "      <td>1000</td>\n",
       "      <td>29.0547</td>\n",
       "      <td>20190529</td>\n",
       "      <td>3287.81</td>\n",
       "      <td>0.550792</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>002057.SZ</td>\n",
       "      <td>中钢天源</td>\n",
       "      <td>9.785</td>\n",
       "      <td>20190528</td>\n",
       "      <td>2700</td>\n",
       "      <td>10.9592</td>\n",
       "      <td>20190529</td>\n",
       "      <td>3123.95</td>\n",
       "      <td>0.626992</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>002075.SZ</td>\n",
       "      <td>沙钢股份</td>\n",
       "      <td>9.1</td>\n",
       "      <td>20190604</td>\n",
       "      <td>3000</td>\n",
       "      <td>8.372</td>\n",
       "      <td>20190614</td>\n",
       "      <td>-2224.84</td>\n",
       "      <td>0.509098</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>002077.SZ</td>\n",
       "      <td>大港股份</td>\n",
       "      <td>7.25</td>\n",
       "      <td>20190604</td>\n",
       "      <td>3700</td>\n",
       "      <td>8.12</td>\n",
       "      <td>20190612</td>\n",
       "      <td>3171.9</td>\n",
       "      <td>0.506163</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>002906.SZ</td>\n",
       "      <td>华阳集团</td>\n",
       "      <td>10.72</td>\n",
       "      <td>20190604</td>\n",
       "      <td>2500</td>\n",
       "      <td>12.0064</td>\n",
       "      <td>20190613</td>\n",
       "      <td>3168.94</td>\n",
       "      <td>0.501834</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>002786.SZ</td>\n",
       "      <td>银宝山新</td>\n",
       "      <td>7.47</td>\n",
       "      <td>20190612</td>\n",
       "      <td>3800</td>\n",
       "      <td>7.23</td>\n",
       "      <td>20190709</td>\n",
       "      <td>-956.232</td>\n",
       "      <td>0.508478</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>603360.SH</td>\n",
       "      <td>百傲化学</td>\n",
       "      <td>25.408</td>\n",
       "      <td>20190620</td>\n",
       "      <td>1100</td>\n",
       "      <td>28.457</td>\n",
       "      <td>20190702</td>\n",
       "      <td>3304.78</td>\n",
       "      <td>0.560057</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>603636.SH</td>\n",
       "      <td>南威软件</td>\n",
       "      <td>9.89</td>\n",
       "      <td>20190620</td>\n",
       "      <td>2900</td>\n",
       "      <td>9.8</td>\n",
       "      <td>20190717</td>\n",
       "      <td>-306.55</td>\n",
       "      <td>0.539024</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>600866.SH</td>\n",
       "      <td>星湖科技</td>\n",
       "      <td>5.11</td>\n",
       "      <td>20190620</td>\n",
       "      <td>5700</td>\n",
       "      <td>5.7232</td>\n",
       "      <td>20190626</td>\n",
       "      <td>3444.09</td>\n",
       "      <td>0.524132</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>603918.SH</td>\n",
       "      <td>金桥信息</td>\n",
       "      <td>11</td>\n",
       "      <td>20190620</td>\n",
       "      <td>2600</td>\n",
       "      <td>10.12</td>\n",
       "      <td>20190709</td>\n",
       "      <td>-2330.79</td>\n",
       "      <td>0.520734</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>600238.SH</td>\n",
       "      <td>ST椰岛</td>\n",
       "      <td>8.3</td>\n",
       "      <td>20190628</td>\n",
       "      <td>3600</td>\n",
       "      <td>9.296</td>\n",
       "      <td>20190725</td>\n",
       "      <td>3533.13</td>\n",
       "      <td>0.594302</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>600685.SH</td>\n",
       "      <td>中船防务</td>\n",
       "      <td>16.19</td>\n",
       "      <td>20190703</td>\n",
       "      <td>1900</td>\n",
       "      <td>18.1328</td>\n",
       "      <td>20190704</td>\n",
       "      <td>3637.3</td>\n",
       "      <td>0.543983</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>603617.SH</td>\n",
       "      <td>君禾股份</td>\n",
       "      <td>18.83</td>\n",
       "      <td>20190709</td>\n",
       "      <td>1600</td>\n",
       "      <td>17.3236</td>\n",
       "      <td>20190715</td>\n",
       "      <td>-2455.31</td>\n",
       "      <td>0.626101</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>002725.SZ</td>\n",
       "      <td>跃岭股份</td>\n",
       "      <td>11.04</td>\n",
       "      <td>20190807</td>\n",
       "      <td>2700</td>\n",
       "      <td>12.3648</td>\n",
       "      <td>20190820</td>\n",
       "      <td>3524.62</td>\n",
       "      <td>0.636553</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>600421.SH</td>\n",
       "      <td>*ST仰帆</td>\n",
       "      <td>7.99</td>\n",
       "      <td>20190807</td>\n",
       "      <td>3800</td>\n",
       "      <td>8.9488</td>\n",
       "      <td>20190821</td>\n",
       "      <td>3590.12</td>\n",
       "      <td>0.621321</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>600546.SH</td>\n",
       "      <td>山煤国际</td>\n",
       "      <td>6.89</td>\n",
       "      <td>20190807</td>\n",
       "      <td>4400</td>\n",
       "      <td>7.7168</td>\n",
       "      <td>20190820</td>\n",
       "      <td>3584.69</td>\n",
       "      <td>0.597554</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>002054.SZ</td>\n",
       "      <td>德美化工</td>\n",
       "      <td>7.7</td>\n",
       "      <td>20190807</td>\n",
       "      <td>3900</td>\n",
       "      <td>8.02</td>\n",
       "      <td>20190903</td>\n",
       "      <td>1198.33</td>\n",
       "      <td>0.593209</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>600319.SH</td>\n",
       "      <td>ST亚星</td>\n",
       "      <td>4.66</td>\n",
       "      <td>20190807</td>\n",
       "      <td>6500</td>\n",
       "      <td>4.95</td>\n",
       "      <td>20190903</td>\n",
       "      <td>1834.09</td>\n",
       "      <td>0.591983</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>600052.SH</td>\n",
       "      <td>浙江广厦</td>\n",
       "      <td>4.39</td>\n",
       "      <td>20190906</td>\n",
       "      <td>7600</td>\n",
       "      <td>4.9168</td>\n",
       "      <td>20190909</td>\n",
       "      <td>3945.09</td>\n",
       "      <td>0.501804</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>67</th>\n",
       "      <td>601519.SH</td>\n",
       "      <td>大智慧</td>\n",
       "      <td>9.4</td>\n",
       "      <td>20190916</td>\n",
       "      <td>3600</td>\n",
       "      <td>8.648</td>\n",
       "      <td>20190918</td>\n",
       "      <td>-2757.82</td>\n",
       "      <td>0.618863</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>68</th>\n",
       "      <td>601066.SH</td>\n",
       "      <td>中信建投</td>\n",
       "      <td>25.63</td>\n",
       "      <td>20190916</td>\n",
       "      <td>1300</td>\n",
       "      <td>23.5796</td>\n",
       "      <td>20190925</td>\n",
       "      <td>-2715.37</td>\n",
       "      <td>0.524244</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>002917.SZ</td>\n",
       "      <td>金奥博</td>\n",
       "      <td>18.68</td>\n",
       "      <td>20190927</td>\n",
       "      <td>1700</td>\n",
       "      <td>17.1856</td>\n",
       "      <td>20191015</td>\n",
       "      <td>-2587.99</td>\n",
       "      <td>0.706824</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>002942.SZ</td>\n",
       "      <td>新农股份</td>\n",
       "      <td>34.29</td>\n",
       "      <td>20191014</td>\n",
       "      <td>900</td>\n",
       "      <td>31.5468</td>\n",
       "      <td>20191021</td>\n",
       "      <td>-2515.05</td>\n",
       "      <td>0.624602</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>002117.SZ</td>\n",
       "      <td>东港股份</td>\n",
       "      <td>13.65</td>\n",
       "      <td>20191031</td>\n",
       "      <td>2300</td>\n",
       "      <td>12.558</td>\n",
       "      <td>20191104</td>\n",
       "      <td>-2558.57</td>\n",
       "      <td>0.518753</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>72 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      ts_code   name buy_price  buy_date  buy_num sell_price  sell_date  \\\n",
       "0   601811.SH   新华文轩   10.7465  20190129     1800    9.88678   20190201   \n",
       "1   002876.SZ    三利谱   27.7515  20190129      700    31.0817   20190211   \n",
       "2   603017.SH   中衡设计   13.6447  20190129     1400    12.4327   20190130   \n",
       "3   000611.SZ  *ST天首      4.07  20190214     4800     4.5584   20190225   \n",
       "4   000670.SZ  *ST盈方      3.38  20190214     5800     3.7856   20190219   \n",
       "5   603598.SH   引力传媒      8.11  20190215     2400       9.32   20190222   \n",
       "6   002170.SZ   芭田股份      3.83  20190215     5200     4.2896   20190219   \n",
       "7   000532.SZ   华金资本    9.6614  20190215     2000    10.8208   20190219   \n",
       "8   002372.SZ   伟星新材   13.1786  20190227     1600      14.76   20190320   \n",
       "9   002689.SZ   远大智能         5  20190301     4400        5.6   20190305   \n",
       "10  603538.SH    美诺华   19.1999  20190301     1100    21.5039   20190311   \n",
       "11  002592.SZ   八菱科技      19.7  20190301     1100         23   20190313   \n",
       "12  002124.SZ   天邦股份     10.78  20190301     2000    12.0736   20190304   \n",
       "13  000605.SZ   渤海股份   10.4434  20190312     2200    11.6966   20190322   \n",
       "14  000517.SZ   荣安地产      2.96  20190312     7900     3.3152   20190319   \n",
       "15  002733.SZ   雄韬股份   23.6367  20190312     1000    21.6703   20190315   \n",
       "16  603711.SH    香飘飘   22.6175  20190312      200    25.3316   20190314   \n",
       "17  601208.SH   东材科技    5.2085  20190314     4800     5.3581   20190411   \n",
       "18  600128.SH   弘业股份      9.65  20190315      700     10.808   20190322   \n",
       "19  002118.SZ   紫鑫药业       7.5  20190318     2800        8.4   20190320   \n",
       "20  000982.SZ  *ST中绒      1.44  20190320    17600     1.6128   20190325   \n",
       "21  603232.SH   格尔软件   24.4464  20190321     1000      27.38   20190326   \n",
       "22  603888.SH    新华网    23.687  20190321     1000    26.6479   20190322   \n",
       "23  002531.SZ   天顺风能    6.6329  20190325     4100    6.10227   20190404   \n",
       "24  600695.SH   绿庭投资       7.2  20190328     3800      8.064   20190401   \n",
       "25  600136.SH   当代明诚   12.8542  20190328     2100    14.4809   20190411   \n",
       "26  002656.SZ   摩登大道      6.43  20190328     4300     7.2016   20190410   \n",
       "27  600604.SH   市北高新   14.2696  20190328      400     15.982   20190402   \n",
       "28  600701.SH  *ST工新      2.73  20190410    10700     3.0576   20190418   \n",
       "29  601500.SH   通用股份    8.1438  20190410     3600     7.4923   20190425   \n",
       "..        ...    ...       ...       ...      ...        ...        ...   \n",
       "42  000416.SZ   民生控股    5.6416  20190507     5100    5.19027   20190530   \n",
       "43  000727.SZ   华东科技      2.28  20190509    12700     2.0976   20190603   \n",
       "44  002592.SZ   八菱科技     18.99  20190509     1500    17.4708   20190520   \n",
       "45  600166.SH   福田汽车      2.57  20190509    11300     2.3644   20190520   \n",
       "46  002547.SZ   春兴精工     12.63  20190521     2100    11.6196   20190527   \n",
       "47  603777.SH    来伊份   12.6082  20190521     2100    14.1212   20190611   \n",
       "48  603220.SH   中贝通信   25.7214  20190521     1000    29.0547   20190529   \n",
       "49  002057.SZ   中钢天源     9.785  20190528     2700    10.9592   20190529   \n",
       "50  002075.SZ   沙钢股份       9.1  20190604     3000      8.372   20190614   \n",
       "51  002077.SZ   大港股份      7.25  20190604     3700       8.12   20190612   \n",
       "52  002906.SZ   华阳集团     10.72  20190604     2500    12.0064   20190613   \n",
       "53  002786.SZ   银宝山新      7.47  20190612     3800       7.23   20190709   \n",
       "54  603360.SH   百傲化学    25.408  20190620     1100     28.457   20190702   \n",
       "55  603636.SH   南威软件      9.89  20190620     2900        9.8   20190717   \n",
       "56  600866.SH   星湖科技      5.11  20190620     5700     5.7232   20190626   \n",
       "57  603918.SH   金桥信息        11  20190620     2600      10.12   20190709   \n",
       "58  600238.SH   ST椰岛       8.3  20190628     3600      9.296   20190725   \n",
       "59  600685.SH   中船防务     16.19  20190703     1900    18.1328   20190704   \n",
       "60  603617.SH   君禾股份     18.83  20190709     1600    17.3236   20190715   \n",
       "61  002725.SZ   跃岭股份     11.04  20190807     2700    12.3648   20190820   \n",
       "62  600421.SH  *ST仰帆      7.99  20190807     3800     8.9488   20190821   \n",
       "63  600546.SH   山煤国际      6.89  20190807     4400     7.7168   20190820   \n",
       "64  002054.SZ   德美化工       7.7  20190807     3900       8.02   20190903   \n",
       "65  600319.SH   ST亚星      4.66  20190807     6500       4.95   20190903   \n",
       "66  600052.SH   浙江广厦      4.39  20190906     7600     4.9168   20190909   \n",
       "67  601519.SH    大智慧       9.4  20190916     3600      8.648   20190918   \n",
       "68  601066.SH   中信建投     25.63  20190916     1300    23.5796   20190925   \n",
       "69  002917.SZ    金奥博     18.68  20190927     1700    17.1856   20191015   \n",
       "70  002942.SZ   新农股份     34.29  20191014      900    31.5468   20191021   \n",
       "71  002117.SZ   东港股份     13.65  20191031     2300     12.558   20191104   \n",
       "\n",
       "     profit  label_prob  label_final  \n",
       "0  -1576.43    0.712017            0  \n",
       "1   2297.01    0.545878            1  \n",
       "2  -1725.16    0.532394            0  \n",
       "3   2310.01    0.612210            1  \n",
       "4   2318.06    0.507976            1  \n",
       "5   2869.08    0.576635            1  \n",
       "6   2354.95    0.576223            1  \n",
       "7   2284.81    0.572501            1  \n",
       "8   2493.26    0.629295            1  \n",
       "9   2601.37    0.666809            1  \n",
       "10   2497.3    0.612722            1  \n",
       "11  3590.61    0.591508            0  \n",
       "12  2549.34    0.585449            1  \n",
       "13  2716.71    0.557822            1  \n",
       "14  2765.02    0.536431            1  \n",
       "15 -2001.66    0.526323            0  \n",
       "16  527.754    0.524474            1  \n",
       "17  677.145    0.637131            0  \n",
       "18  793.034    0.776784            1  \n",
       "19  2483.12    0.567215            1  \n",
       "20  2996.78    0.551106            1  \n",
       "21  2890.64    0.672865            1  \n",
       "22  2919.15    0.570559            1  \n",
       "23 -2216.27    0.613390            0  \n",
       "24  3235.16    0.716304            1  \n",
       "25  3368.44    0.709479            0  \n",
       "26  3269.33    0.706717            1  \n",
       "27  668.548    0.703958            1  \n",
       "28  3454.03    0.667350            1  \n",
       "29 -2389.27    0.642757            0  \n",
       "..      ...         ...          ...  \n",
       "42 -2344.82    0.801270            0  \n",
       "43  -2359.8    0.683244            0  \n",
       "44 -2321.41    0.676076            0  \n",
       "45 -2366.73    0.664682            0  \n",
       "46 -2161.52    0.647187            0  \n",
       "47  3130.77    0.568171            1  \n",
       "48  3287.81    0.550792            1  \n",
       "49  3123.95    0.626992            1  \n",
       "50 -2224.84    0.509098            0  \n",
       "51   3171.9    0.506163            0  \n",
       "52  3168.94    0.501834            1  \n",
       "53 -956.232    0.508478            0  \n",
       "54  3304.78    0.560057            1  \n",
       "55  -306.55    0.539024            0  \n",
       "56  3444.09    0.524132            1  \n",
       "57 -2330.79    0.520734            0  \n",
       "58  3533.13    0.594302            1  \n",
       "59   3637.3    0.543983            1  \n",
       "60 -2455.31    0.626101            0  \n",
       "61  3524.62    0.636553            0  \n",
       "62  3590.12    0.621321            1  \n",
       "63  3584.69    0.597554            1  \n",
       "64  1198.33    0.593209            0  \n",
       "65  1834.09    0.591983            0  \n",
       "66  3945.09    0.501804            1  \n",
       "67 -2757.82    0.618863            0  \n",
       "68 -2715.37    0.524244            0  \n",
       "69 -2587.99    0.706824            0  \n",
       "70 -2515.05    0.624602            0  \n",
       "71 -2558.57    0.518753            0  \n",
       "\n",
       "[72 rows x 10 columns]"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tmp_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "账户盈利情况:0.5819\n",
      "上证指数浮动情况:0.2238\n",
      "交易胜率:0.6111\n",
      "最大回撤率:0.1665\n"
     ]
    }
   ],
   "source": [
    "account_profit = (account.market_value - money_init) / money_init\n",
    "index_profit = (close2 - close1) / close1\n",
    "win_rate = account.victory / (account.victory + account.defeat)\n",
    "print('账户盈利情况:%.4f' % account_profit)\n",
    "print('上证指数浮动情况:%.4f' % index_profit)\n",
    "print('交易胜率:%.4f' % win_rate)\n",
    "print('最大回撤率:%.4f' % account.max_retracement)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAHjCAYAAAAg4dmtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd4m+W5P/Dvq2VJtmV575UdO5NMEkhI2HscCqSFQjlAKaNAf7Slp4OWtue0hfbAKaWUFprTQkNpKPuUkLCySZydODvxiqdkW7a1x/P7Q5Zix7It25K1vp/r4qojvXr1xGnir2/fz/1IQggQERERESU6WaQXQEREREQUDRiMiYiIiIjAYExEREREBIDBmIiIiIgIAIMxEREREREABmMiIiIiIgAMxkREREREABiMiYiIiIgAMBgTEREREQEAFJF646ysLFFWVhaptyciIiKiBLFr1y6DECJ7uOsiFozLyspQVVUVqbcnIiIiogQhSVJtMNexlYKIiIiICAzGREREREQAGIyJiIiIiABEsMeYiIiIKJ45nU40NDTAZrNFeikJQ61Wo6ioCEqlclSvZzAmIiIiCoOGhgakpqairKwMkiRFejlxTwgBo9GIhoYGlJeXj+oebKUgIiIiCgObzYbMzEyG4nEiSRIyMzPHVKFnMCYiIiIKE4bi8TXWzzeDMRERERERGIyJiIiI4pYkSbjjjjv8v3a5XMjOzsY111wTwVWNzdtvv43q6uqw3JvBmIiIiChOJScn4+DBg7BarQCA9evXo7CwMMKrGptwBmNOpSAiIiIKs5+8dwjVjV0hvWdFgQ5PXls57HVXXnklPvjgA9x8881Ys2YNVq1ahU2bNsHj8WDq1KnYunUrsrOz4fF4MGXKFGzfvh1ZWVn+1+/YsQOPPvoorFYrNBoN/vznP2Pq1Klwu9347ne/i3Xr1kGSJNx77714+OGHsXPnTjzyyCMwm81ISkrCxx9/DKVSiW984xuoqqqCQqHAb37zG6xYsQKrV69GVVUVnn/+eQDANddcg8cffxwXXXQRUlJS8Mgjj+D999+HRqPBO++8g5MnT+Ldd9/F559/jp/97Gd48803MXHixJB9TlkxJiIiIopjt912G15//XXYbDbs378fixYtAgDIZDLcfvvteO211wAAGzZswOzZs/uFYgCYNm0aNm7ciD179uCpp57Cf/zHfwAAXnrpJZw+fRp79uzB/v378ZWvfAUOhwO33nornnvuOezbtw8bNmyARqPB7373OwDAgQMHsGbNGtx5553DTo8wm81YvHgx9u3bh2XLluGPf/wjlixZguuuuw5PP/009u7dG9JQDLBiTERERBR2wVR2w2XWrFmoqanBmjVrcNVVV/V77u6778b111+PRx99FK+88gq+9rWvDXi9yWTCnXfeiePHj0OSJDidTgDeIH3//fdDofDGyYyMDBw4cAD5+flYsGABAECn0wEANm/ejIcffhiAN2iXlpbi2LFjQ65bpVL5e6HnzZuH9evXj+GzEBxWjImIiIji3HXXXYfHH38cq1at6vd4cXExcnNz8cknn+CLL77AlVdeOeC1P/zhD7FixQocPHgQ7733nr/SK4QYMB4t0GO+xwNRKBTweDz+X/etIiuVSv+95HI5XC5XkL/b0WMwJiIiIopzd999N370ox9h5syZA5675557cPvtt+OWW26BXC4f8LzJZPJv2Fu9erX/8csuuwwvvviiP7C2t7dj2rRpaGxsxM6dOwEA3d3dcLlcWLZsmb9l49ixY6irq8PUqVNRVlaGvXv3wuPxoL6+Hjt27Bj295Kamoru7u4Rfw6CwWBMREREFOeKiorwyCOPBHzuuuuuQ09PT8A2CgD4zne+g+9973tYunQp3G63//F77rkHJSUlmDVrFmbPno2//e1vUKlU+Pvf/46HH34Ys2fPxqWXXgqbzYYHHngAbrcbM2fOxK233orVq1cjKSkJS5cuRXl5OWbOnInHH38c55133rC/l9tuuw1PP/005s6di5MnT47uEzIIabDSdrjNnz9fVFVVReS9iYiI4oXF4YLTPfjXcq1KDqWcdbBIOHz4MKZPnx7pZQyrqqoKjz32GDZt2hTppYREoM+7JEm7hBDzh3stN98RERHFICEE/ufjE3j242MYqsZVnpWMDd9aDrmMRxPTQL/4xS/w+9//3t/mkOgYjImIiGKMxyPw0w+q8ectNbh6Zj7OK00PeF2d0Yz/3VaLjcfasGJazjivkmLBE088gSeeeCLSy4gaDMZEREQx5sl3D+Gv22tx99Jy/ODq6ZANUg12uDx4f38T3qiqZzAmCgKbjoiIiGKI0+3B33bU4eZ5RfjhNYOHYgBQKWS4cW4hNhxugbHH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\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import Draw\n",
    "reload(Draw)\n",
    "%matplotlib inline\n",
    "index_value = list(index_df[index_df['trade_date']==test_date_min+1]['pre_close']) + list(index_df.sort_values('trade_date')['close'])\n",
    "Draw.Draw_Market_Value_Change(0, account.market_value_all, index_value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "unexpected EOF while parsing (<ipython-input-46-5a1b83c6a01b>, line 6)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  File \u001b[0;32m\"<ipython-input-46-5a1b83c6a01b>\"\u001b[0;36m, line \u001b[0;32m6\u001b[0m\n\u001b[0;31m    #         break\u001b[0m\n\u001b[0m                   ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m unexpected EOF while parsing\n"
     ]
    }
   ],
   "source": [
    "num = 0\n",
    "for ts_code, buy_date, sell_date in zip(account.info['ts_code'], account.info['buy_date'], account.info['sell_date']):\n",
    "    Draw.Draw_Stock(ts_code, stock_info, buy_date, sell_date, left_offset=10, right_offset=30)\n",
    "    num = num + 1\n",
    "    if num > 60:\n",
    "#         break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
